[ESP32][esp |
您所在的位置:网站首页 › Esp32 ap模式配置wifi信息 › [ESP32][esp |
#include #include #include "esp_event.h"#include "esp_log.h"#include "esp_system.h" #include "nvs_flash.h"#include "esp_wifi.h"#include "esp_netif.h"#include "lwip/inet.h"#include "lwip/lwip_napt.h" // 热点名称 密码 可连接数量#define AP_WIFI_SSID "lisun"#define AP_WIFI_PASS "xjq12345"#define AP_MAX_STA_CONN 4 // 路由器wifi名称 密码#define STA_WIFI_SSID "xjq"#define STA_WIFI_PASS "xjq12345" static const char *TAG = "LiSun"; static esp_netif_t* _esp_netif_sta = NULL;static esp_netif_t* _esp_netif_ap = NULL; static void wifi_event_handler(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data) { if (event_id == WIFI_EVENT_AP_STACONNECTED) { wifi_event_ap_staconnected_t *event = (wifi_event_ap_staconnected_t *)event_data; ESP_LOGI(TAG, "station " MACSTR " join, AID=%d", MAC2STR(event->mac), event->aid); } else if (event_id == WIFI_EVENT_AP_STADISCONNECTED) { wifi_event_ap_stadisconnected_t *event = (wifi_event_ap_stadisconnected_t *)event_data; ESP_LOGI(TAG, "station " MACSTR " leave, AID=%d", MAC2STR(event->mac), event->aid); }} static void sta_start_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data) { esp_wifi_connect();} static void got_ip_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data) { //No need to log, wifi driver logs automatically esp_netif_dns_info_t dns; if (esp_netif_get_dns_info(_esp_netif_sta, ESP_NETIF_DNS_MAIN, &dns) == ESP_OK) { dhcps_dns_setserver((const ip_addr_t *)&dns.ip); ESP_LOGI(TAG, "set dns to:" IPSTR, IP2STR(&dns.ip.u_addr.ip4)); }} static void wifi_init_softap(void){ wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); ESP_ERROR_CHECK(esp_wifi_init(&cfg)); ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL)); wifi_config_t wifi_config = { .ap = { .ssid = AP_WIFI_SSID, .ssid_len = strlen(AP_WIFI_SSID), .password = AP_WIFI_PASS, .max_connection = AP_MAX_STA_CONN, .authmode = WIFI_AUTH_WPA_WPA2_PSK }, }; if (strlen(AP_WIFI_PASS) == 0) wifi_config.ap.authmode = WIFI_AUTH_OPEN; ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_APSTA)); ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_AP, &wifi_config)); wifi_config_t cfg1 = { .sta = { .ssid = STA_WIFI_SSID, .password = STA_WIFI_PASS, .threshold = {.rssi=0, .authmode = WIFI_AUTH_WPA2_PSK}, .pmf_cfg = { .capable = true, .required = false }, }, }; ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &cfg1)); ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, WIFI_EVENT_STA_START, sta_start_handler, NULL)); ESP_ERROR_CHECK(esp_wifi_start()); esp_netif_ip_info_t ip_info; esp_netif_get_ip_info(esp_netif_get_handle_from_ifkey("WIFI_AP_DEF"), &ip_info); char ip_addr[16]; inet_ntoa_r(ip_info.ip.addr, ip_addr, 16); ESP_LOGI(TAG, "Set up softAP with IP: %s", ip_addr); ESP_LOGI(TAG, "wifi_init_softap finished. SSID:'%s' password:'%s'", AP_WIFI_SSID, AP_WIFI_PASS);} void app_main(void){ // Initialize networking stack ESP_ERROR_CHECK(esp_netif_init()); // Create default event loop needed by the main app ESP_ERROR_CHECK(esp_event_loop_create_default()); // Initialize NVS needed by Wi-Fi ESP_ERROR_CHECK(nvs_flash_init()); // Initialize Wi-Fi including netif with default config _esp_netif_ap = esp_netif_create_default_wifi_ap(); _esp_netif_sta = esp_netif_create_default_wifi_sta(); // Initialise ESP32 in SoftAP mode wifi_init_softap(); ip_addr_t dnsserver; // Enable DNS (offer) for dhcp server dhcps_offer_t dhcps_dns_value = OFFER_DNS; dhcps_set_option_info(6, &dhcps_dns_value, sizeof(dhcps_dns_value)); // Set custom dns server address for dhcp server 默认跟随路由器 【推荐换成国内DNS】 dnsserver.u_addr.ip4.addr = htonl(0xC0A80301); dnsserver.type = IPADDR_TYPE_V4; dhcps_dns_setserver(&dnsserver); #if IP_NAPT // !!! 必须启动sta后再设置,不然ap无网络 !!! Set to ip address of softAP netif (Default is 192.168.4.1) u32_t napt_netif_ip = 0xC0A80401; ip_napt_enable(htonl(napt_netif_ip), 1);#endif } |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |